package com.ynsj.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ynsj.domain.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ynsj.model.UnsetPayPasswordParam;
import com.ynsj.model.UpdateLoginParam;
import com.ynsj.model.UpdatePhoneParam;
import com.ynsj.model.UserCheckForm;
import com.ynsj.vo.UserAuthInfoVo;

import java.util.List;

public interface UserService extends IService<User>{

    /**
     * 会员列表分页查询
     * @param userPage 分页参数
     * @param mobile 会员手机号
     * @param userId 会员ID
     * @param userName 会员名称
     * @param realName 会员真实姓名
     * @param status 会员状态
     * @return
     */
    Page<User> findByPage(Page<User> userPage, String mobile, Long userId, String userName, String realName, Integer status);

    /**
     * 启用/禁用会员
     * @param id
     * @param status
     * @return
     */
    boolean updateStatus(Long id, Integer status);

    Page<User> findDirectPage(Page<User> userPage, Long userId);

    Page<User> findAuthByPage(Page<User> userPage, String mobile, Long userId, String userName, String realName, Integer reviewsStatus);

    /**
     * 根据id查询用户认证详情
     * @param id
     * @return
     */
    UserAuthInfoVo getUserInfoById(Long id);

    /**
     * 审核用户照片信息
     * @param id
     * @param authStatus
     * @param authCode
     * @param remark
     * @return
     */
    void updateAuthStatus(Long id, Integer authStatus, Long authCode, String remark);

    /**
     * 用户实名认证
     * @param userCheckForm 用户认证数据对象
     * @return
     */
    boolean identifyCheck(UserCheckForm userCheckForm);

    /**
     * 用户进行认证
     * @param singletonList 用户图片地址
     */
    void authUser(List<String> singletonList);

    /**
     * 修改用户的手机号
     * @param updatePhoneParam
     * @return
     */
    boolean updatePhone(UpdatePhoneParam updatePhoneParam);

    /**
     * 检查新的手机号是否可用，若可用，给新手机号发送验证码
     * @param mobile 新的手机号
     * @param countryCode 国家代码
     * @return
     */
    boolean checkTel(String mobile, String countryCode);

    /**
     * 修改用户的登录密码
     *
     * @param userId           用户的ID
     * @param updateLoginParam 修改密码的表单参数
     * @return
     */
    boolean updateUserLoginPwd(Long userId, UpdateLoginParam updateLoginParam);

    /**
     * 修改用户的交易密码
     *
     * @param userId           用户的Id
     * @param updateLoginParam 修改交易密码的表单参数
     * @return
     */
    boolean updateUserPayPwd(Long userId, UpdateLoginParam updateLoginParam);

    /**
     * 重置用户的支付密码
     *
     * @param userId                用户的Id
     * @param unsetPayPasswordParam 重置的表单参数
     * @return 是否重置成功
     */
    boolean unsetPayPassword(Long userId, UnsetPayPasswordParam unsetPayPasswordParam);
}
